﻿using System;
using System.IO;
namespace Black.NBT
{
    /// <summary>
    /// Représente un tag END
    /// </summary>
    public class TagEnd : Tag, ICloneable
    {
        #region Constructeur de la classe

        /// <summary>
        /// Constructeur de la classe
        /// </summary>
        /// <param name="name">Nom du tag</param>
        public TagEnd(string name)
            : base(name)
        {
            this.TagType = NBT.TagType.End;
        }

        #endregion

        #region Fonctions internes

        /// <summary>
        /// Ecrit l'instance sur le stream
        /// </summary>
        /// <param name="stream">Instance du flux</param>
        /// <param name="writeName">Inscrit le nom</param>
        internal override void WriteToStream(MemoryStream stream, bool writeName)
        {
            // Ecriture du type

            stream.WriteByte((byte)this.TagType);
        }

        #endregion

        #region Fonctions statiques internes

        /// <summary>
        /// Ecrit une balise TAG_END dans le flux
        /// </summary>
        /// <param name="stream">Instance du flux</param>
        internal static void WriteTagEnd(MemoryStream stream)
        {
            // Ecriture du type

            stream.WriteByte((byte)TagType.End);
        }

        #endregion

        #region Clonage

        /// <summary>
        /// Clone l'instance
        /// </summary>
        /// <returns>Nouvelle instance</returns>
        object ICloneable.Clone()
        {
            return (this.Clone());
        }

        /// <summary>
        /// Clone l'instance
        /// </summary>
        /// <returns>Nouvelle instance</returns>
        public virtual TagEnd Clone()
        {
            TagEnd clone = this.MemberwiseClone() as TagEnd;

            return (clone);
        }

        #endregion
    }
}
